
#include "Log.h"

using namespace std;

Log* Log::Instance_id = NULL;

Log::Log() {
	mutex = new ThreadMutex();
}

// Retorna la instancia si ya se encuentra generada una.
Log* Log::Instance()
{
	if (!Instance_id)
		Instance_id = new Log();
	return Instance_id;
}
// Genera la carpeta y el archivo de log.
void Log::openLog(string logFile)
{
	logFile = "./Log/" + logFile;
	mkdir("Log",0744);
	char *file = new char[logFile.length() + 1];
	strcpy(file,logFile.c_str());
	cout << "Iniciando el Log..." << endl;
	fs.open(file,ofstream::out | ofstream::app);
	fs << "Log iniciado. -- " << tiempo() << endl;
}
// Graba lo recibido por parámetro en el Log.
void Log::loguear(string datos)
{
	char *linea = new char[datos.length() + 1];
	strcpy(linea, datos.c_str());
	mutex->P();
	fs << linea << " -- " << tiempo() << endl;
	mutex->V();
}
// Cierrra el log.
void Log::closeLog()
{
	fs << "Log finalizado. -- " << tiempo() << endl;
	mutex->P();
	fs.close();
	mutex->V();
	mutex->Eliminar();
}

//obtengo la fecha para el log.
string Log::tiempo()
{
	time_t tiempo;
	struct tm *local_time;
	tiempo = time(NULL);
	local_time = localtime (&tiempo);
	return asctime (local_time);
}
